package exception;

/**
 * 自定义异常
 */
public class CustomException {

    public static void main(String[] args) {
        /*
            当程序出现了某些”错误“，但该错误信息并没有在Throwable子类中描述处理
            这时可以自己设计异常类，用于描述该错误信息
            步骤：
            1)定义类：自定义异常类名 继承 Exception 或 RuntimeException
            2)如果继承 Exception，属于编译异常
            3)如果继承 RuntimeException，属于运行异常
            例：
            当接收Person 对象年龄时，要求范围在 18~120 之间，否则抛出一个自定义异常，并给出提示信息
         */
        int age = 190;

        if(!(age >= 18 && age <= 120)) {
            //这里可以通过构造器，设置信息
            throw new Exception1("年龄需要在 18~120 之间");
        }
        System.out.println("你的年龄范围正确.");

        /*
            throws 和 throw 的区别
                        意义                          位置              后面跟的东西
            throws      异常处理的一种方式           方法声明处           异常类型
            throw       手动生成异常对象的关键字        方法体中            异常对象
         */
    }
}

//一般情况下 自定义异常是继承 RuntimeException
class Exception1 extends RuntimeException {

    public Exception1(String message) {
        super(message);
    }

}